package mylab.io.base;

import mylab.io.base.context.DasContext;
import mylab.io.base.fsm.DasStatus;
import mylab.io.base.model.Msg;
import mylab.io.base.property.DasProperties;


/**
 * 终端接入服务： Device Access Service
 */
public interface Das<Ctx extends DasContext<P, M>, P extends DasProperties, M extends Msg>
        extends FSM, MsgSender<M> {

    /**
     * Das上下文对象
     */
    Ctx getContext();

    /**
     * Das当前状态
     *
     * @return Das状态
     */
    DasStatus getStatus();


    /**
     * 当前Das观察者
     *
     * @return Das观察者
     */
    DasWatcher<M> getWatcher();

    /**
     * 设置Das观察者
     *
     * @param watcher Das观察者
     */
    void setWatcher(DasWatcher<M> watcher);

}
